package cn.kgc.springcloud.controller;

import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author 课工场
 * @date 2024/7/23
 * @description
 *
 * 在项目中引入hystrix组件  可以对项目中的方法进行监控
 * 如果方法出现了异常,则直接进入快速响应方法  这种现象也是服务降级的一种体现
 * 如果在较短的时间内,快速响应方法效用的次数或比例达到一定的阈值,则会触发服务的熔断机制
 * 服务一旦被熔断,不管当前方法是否可以处理目前接收的请求,一律执行快速响应
 *
 */
@RestController
@RequestMapping("s2")
public class Service2Controller {

    @GetMapping("m1")
    @HystrixCommand(fallbackMethod = "method1FallbackMethod")
    public String  method1(Integer id){
        System.out.println("-------------method1-----------------");
        if (id<0){
            throw  new RuntimeException("参数异常");
        }
        return "invoke Service2Controller  ok  id "+id;
    }

    // 快速响应方法    方法的设计要满足和@HystrixCommand修饰的方法 返回值和参数列表一致
    public String  method1FallbackMethod(Integer id){
        System.out.println("--------------method1FallbackMethod------------------");
        return "参数异常,id = "+id;
    }
}
